L’analyse porte sur une campagne marketing conduite auprès d’un ensemble de clients résidant en France. Sur chaque client, le résultat de la campagne est mesurée par sa “réussite (success)” ou son “échec (failure)”. L’objectif du projet consiste à prédire le succès de la campagne marketing en fonction des caractéristiques des clients.
Jeu de données Pour cela nous disposons de 2 fichiers, qui pour chaque ligne d’un fichier décrit un client.
Les variables caractérisant chaque client sont les suivantes :
revenu : salaire mensuel en équivalent temps plein
cible : résultat de la campagne codé par “success”" pour un résultat considéré comme positif et “failure” dans le cas contraire. Cette variable est absente du fichier test.
Données annexes
Des informations annexes peuvent être utilisées pour cette analyse :
Contenu du Rapport (A garder pour memoire - et supprimer avant transmission du projet )
Analyse exploratoire minimale des données (statistiques univariées, dépendances, etc.) ;
Justification du modèles prédictif choisi ;
Description précise de la chaîne de traitement : prétraitements éventuels, ajustement des modèles, choix du modèle, évaluation de ses performances attendues (le rapport doit impérativement contenir un tableau indiquant la qualité numérique attendue pour les prévisions sur le fichier test) ;
Analyse de l’importance des variables : cela peut être fait avant l’ajustement des modèles, pendant celui-ci ou après le choix du modèle final. Dans tous les cas, le rapport doit discuter de l’opportunité de construire des modèles sur une partie seulement des variables. Si c’est le cas, les prévisions finales et les performances attendues doivent concerner les modèles n’utilisant que les variables pertinentes ;
Interprétation du modèle retenu : si cela est possible, une interprétation de la façon dont les décisions du modèle retenu sont prises fournira un complément très important au reste de l’analyse.
Retraitements nécessaires :
Ajoutons les coordonnées géographiques et la population aux jeux de données d’entrainement et de test.
Jeu d’appprentisage
Dans le jeu d’apprentissage, seule la variable “revenue” est manquante pour 5320 valeurs, soit 53% de valeurs manquantes.
Le graphique de suivant confirme cette observation :
Jeu de test
Dans le jeu test, seule la variable “revenue” est manquante pour 5175 valeurs, soit 52% de valeurs manquantes.
Résultat de campagne et les revenus manquants
Regardons s’il y a un lien entre le résultat de la campagne et les revenus manquants.
La proportion d’échec de la campagne est plus forte lorsque la variable “revenu”" n’est pas renseignée que lorsque les personnes ont indiqué la valeur de leur revenu.
Identifier la cause des revenus manquants et l’influence sur la campagne
Composons une variable qui dépend de la disponibilité (prend une valeur) ou non (NA) de la variable revenu, et du succès ou de l’échec de la campagne (variable cible). Cette nouvelle variable revmv.cible prend donc valeurs :
| Variable Revenu | Cible = Succès | Cible = Echec |
|---|---|---|
| Valeur numérique | revVAL-succès | revVAL-échec |
| NA | revNA-succès | revNA-échec |
Cherchons s’il se dégage une influence marquée, entre cette variable composée et une des covariables de notre jeu de donnée : l’age, la catégorie socio-professionnelle, le genre,la region ou le type de ville.
Il apparait que les valeurs de l’age, du genre, de la region ou du type de ville sont représentées indifféremment pour du revenu manquant ou non. La catégorie socio-professionnelle,
Afin d’avoir plus d’information sur les données manquantes, nous allons utiliser le graphique “Marginplot” et observé chaque variable avec la variable revenue. Dans ce graphique, les points sans valeurs manquantes apparaissent dans le scatterplot. On observe qu’il manque des valeurs pour tous les âges (ligne rouge verticale, de 15 à 100 ans). Nous avons également les boxplots des distributions des valeurs : en rouge quand la valeur est manquante et en bleu quand la valeur est observée.
Le revenu et l’âge
Les valeurs des revenus sont observées uniquement sur la tranche d’âge des 18 ans-69 ans, qui correspond à la période d’activité professionnelle.
Le revenu et la catégorie socio-professionnelle
Selon le graphique, il y a que trois catégories sans revenu (10, 11 et 12) : chômeurs, inactifs et retraités. Sur le reste des catégories, nous ne trouverons pas des données absentes.
Dans la distribution on note que des personnes aux revenus se trouvent dans la catégorie cadres.
Le revenu et le genre
En ce qui concerne le genre, nous avons des données absentes pour les deux catégories, cependant les hommes ont les salaires le plus élevés de l’échantillon.
Le revenu et la region
Pour la région aussi, il semblerait aussi que nous avons des données manquantes pour toutes les régions.
Le revenu et le resultat de la campagne
` Pour la cible, on observe qu’il y a des données manquantes pour les deux catégories : Failure et success. Mais leur absence n’est pas equilibrée, on retrouve plus des données absentes pour l’échec que pour le succès.
Les données semblent bien équilibrées entre les deux catégories à prédire : Failure et Success
Nous observons une distribution très différente selon l’âge : l’échec est bien répartie entre 25 et 75 ans, par contre le succès est concentré entre 30 et 55 ans, avec quelques valeurs extrêmes superieurs à 75 ans. L’âge est sûrement une variable qui sera pertinente pour la prédiction.
Pour la population et les revenus, il ne semble pas y avoir des différences.
Les hommes ont un taux d’échec (60%) plus élevé que les femmes (45%). Pour les âges, la mediane de l’échec des femmes est autour de 70 ans et pour les hommes 50 ans.
L’échantillon est composé d’un plus grand nombre de femmes que d’hommes (5259 vs 4741)
La région Ile de France cumule une bonne partie des resultats (concentration de succès), mais en dehors ils sont bien équilibrés. La région Corse a une participation très basse.
Les retraités et les étudiants (catégorie 13 et 10), enregistrent la plupart des échecs, tandis que les catégories 2 a 8, 11 et 12 (chomeurs et inactifs) ont la plupart des succès, surement s’agit-il d’une des variables à garder pour la prédiction.
Paris, en tant que capitale, enregistre très peu de résultats, en sachant que la région Ile de France est la plus représentée dans l’échantillon.
Les âges sont bien repartis sur tous les types de communes.
Voici la repartition des reponses sur toute la France, on observe plus de succès au nord et plus d’échecs au sud (region Auvergne-Rhône-Alpes).
Ce graphique montre que les variables qui vont beaucoup influencer notre prédiction seront surement l’age et la categorie socio-professionnelle.
Il s’agit de construire un modèle prédictif, en testant plusieurs méthodes (régression logistique, random forests), de fournir des prévisions du succes de la campagne à partir du profil client et une évaluation des performances attendues (Le critère de qualité principal retenu est le taux d’erreur) D’autre part, on tentera de sélectionner les variables les plus pertinentes (importance des variables) et d’interpréter le modèle (évaluation basée sur la courbe ROC).
Validation croisée
Nous créons d’abord la partition de données, avec 70% pour l’entrainement et 30% pour la validation. Nous sortons les variables qui ne semblent pas apporter d’information.
Ensuite nous utilisons la fonction GLM, pour faire une régression logistique
Le modele qu’il a choisit avec le meilleure AIC est : cible ~ categorie + age + sex + REGION + city.type. Il semblerait dans ce choix que la variable “population” ne soit pas pertinente.
AIC: 5832.4
Prediction
Voici la matrice de confusion quand le seuil est fait à 50% :
L’erreur de prédiction que nous obtenons est de :
Nous pouvons optimiser cette prédiction, en trouvant le seuil optimal :
et son nouvel erreur de prédiction est plus bas :
Ajustement du modèle
Graphique des résidus
ROC :
Comme dernière étape nous allons construire la courbe ROC et calculer l’AUC (area under the curve), qui sont des mesures de performance très connues lors de la classification.
La courbe ROC est faite en mettant le TPR (True positive rate) vs FPR (False positive rate), avec plusieurs seuils, et l’AUC est l’aire sous la courbe ROC
AUC : un modèle avec une bonne capacité prédictive devrait avoir l’AUC le plus proche de 1 que de 0,5.
Validation croisée
Comme pour la régression logistique, nous allons faire nos partitions avec 70% pour l’entrainement et 30% pour la validation.
Création du premier arbre
Nous allons faire notre premier arbre sans ajuster les paramêtres de contrôle de l’arbre, avec les paramètres par défaut de la fonction rpart (minsplit = 20, minbucket = round(minsplit/3), cp = 0.01)
Voici le graphique de l’arbre qui est produit avec rpart:
rpart utilise l’impureté Gini pour sélectionner les divisions lors de la classification. L’impureté Gini est la probabilité de classer incorrectement un élément choisi au hasard dans l’ensemble de données, s’il était étiqueté de manière aléatoire en fonction de la distribution des classes. L’impureté Gini de 0 est le plus bas possible, il est possible quand toutes les données sont dans la même class.
Sans surprise, comme nous l’avions vu avec l’analyse initial, la catégorie, l’âge et le sex sont les critères utilisés pour faire les splits. Les catégories 10 et 13 font le premier split, ensuite l’âge 32 et 61, pour finir avec le sexe. Aucune autre variable est utilisée pour faire des splits.
Avec ce graphique, chaque noeud montre :
Zoom sur le CP
Le CP (complexity parameter) est utilisé pour contrôler la croissance de l’arbre et sélectionner la taille optimal de l’arbre. Si le coût d’ajouter une variable est plus élevé que la valeur du CP, la croissance s’arrête.
Les fonctions printcp et plotcp fournissent l’erreur de validation croisée pour chaque nsplit et peuvent être utilisées pour élaguer l’arbre. Celui avec le moins d’erreur de validation croisée (xerror) est la valeur optimale de CP.
Avec plotcp, il vous montre également l’endroit optimal pour élaguer l’arbre. Un bon choix de CP pour l’élagage est souvent la valeur la plus à gauche pour laquelle la moyenne se situe en dessous de la ligne horizontale, dans notre cas 0,01, la valeur par défaut.
Pour la fonction printcp, chaque ligne représente une hauteur différente de l’arbre. En général, plus de niveaux dans l’arbre signifient qu’il a moins d’erreur de classification sur l’entrainement. Cependant, il existe le risque d’overfitting. Souvent, l’erreur de validation croisée augmentera à mesure que l’arbre atteindra plus de niveaux (au moins, après le niveau «optimal»).
sans surprise la meilleure valeur est 0,01
Matrice de confusion et ROC
Tuner l’arbre
Nous allons aussi modifier le paramètre “minsplit”, il contrôle le nombre minimum d’observations qui doit exister dans un nœud pour qu’une tentative de division soit faite, minbucket et CP
Nous allons démarrer avec le CP = 0.0001, et minsplit =2
Prune the tree Random Forest XGBOOST Leave one out
Solution - Imputation des données
Pour que l’imputation fonctionne, il faut enlever des colonnes avec trop de catégories, et celles qui ne devraient pas apporter plus d’information comme le prénom et le nom.
L’imputation avec mice, sera faite avec rf : “Random forest imputation”, en utilisant les données d’age, sex, region, categorie et population pour trouver le revenue correspondant.
Nous verifions que l’imputation respecte bien la structure des données orginal, et c’est bien le cas :
La tâche de prédiction consiste à déterminer le succès de la campagne marketing en fonction des caractéristiques des clients. Le critère de qualité principal retenu est le taux d’erreur, mais il est intéressant dans ce type d’application de trier les clients en fonction de leur appétence supposée à la campagne. Une évaluation basée sur la courbe ROC pourra donc être envisagée. Le projet devra mettre en œuvre au moins deux méthodes prédictives différentes comme par exemple la régression logistique et les random forests.